package com.lizhenhua.orderadd.service.impl;

import com.codingapi.txlcn.tc.annotation.LcnTransaction;
import com.lizhenhua.fmmall.entity.Orders;
import com.lizhenhua.fmmall.entity.ShoppingCartVo;
import com.lizhenhua.orderadd.feign.FeignClient;
import com.lizhenhua.orderadd.mapper.OrderAddMapper;
import com.lizhenhua.orderadd.service.OrderAddService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
public class OrderAddServiceImpl implements OrderAddService {
    @Autowired
    private OrderAddMapper orderAddMapper;

    @Autowired
    private FeignClient feignClient;

    @Override
    @Transactional    // 和下面Lcn 一起用
    @LcnTransaction  // lcn模式 分布式事务注解
    public List<ShoppingCartVo> saveOrder(String cids, Orders orders) {

        List<ShoppingCartVo> list = feignClient.queryStock(cids);

        try {
            boolean bl = true;
            String untitled = ""; // 所有商品名称
            // 2. 检验库存 购物车的数量小于库存数量才可以
            for (ShoppingCartVo s : list
            ) {
                if (Integer.parseInt(s.getCartNum()) > s.getSkuStock()) {
                    bl = false;
                    break;
                }
                // 获取所有商品名称,以, 分割成字符串
                untitled = untitled + s.getProductName() + ",";
            }
            untitled = untitled.substring(0, untitled.length() - 2);
            // 2.保存订单
            if (bl) {
                // 表示库存充足 ---- 保存订单
                // 需要的参数
                // 1. 用户的 userId
                // 2. 用户提交商品的 cids
                // 3. 收货地址信息  两种发发 1.根据收货地址的addrId 收货地址详情 2.收货人姓名地址电话 从前面传过来  再次用的方案2
                // 4. 商品的总价格   可以从前端传过来
                // 5. 支付方式
                // 6. 订单创建时间
                // 7. 订单初始状态
                // 我们可以 通过Orders对象传参  除了cids
                orders.setUntitled(untitled);
                orders.setCreateTime(new Date());
                // 订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:已完成 6:已关闭
                orders.setStatus("1");  // 初始状态为未支付
                // 生成订单编号
//                String orderId = UUID.randomUUID().toString().replace("-", "");
//                orders.setOrderId(orderId);
                int insert = orderAddMapper.insert(orders);
            }
        } catch (Exception e) {
            System.out.println("保存订单出现异常");
        } finally {
            return list;
        }
    }


}
